/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.lardocelar.core.acaocaptador;

import br.com.lardocelar.core.AcaoCaptador;
import br.com.lardocelar.core.Captador;
import br.com.lardocelar.core.Mensagem;
import br.com.lardocelar.core.MensagemInvalida;
import br.com.lardocelar.core.Registro;
import br.com.lardocelar.core.Servidor;
import br.com.lardocelar.core.SituacaoCaptador;
import java.io.IOException;

/**
 *
 * @author Leandro
 */
public class LigarTomada implements AcaoCaptador {

    @Override
    public String getFuncionalidade(){
        return "01";
    }
    
    @Override
    public void Acionar(Captador captador, Servidor servidor) throws Exception {
        if(captador.getSituacao() == SituacaoCaptador.DISPONIVEL){
            Mensagem msgEnvio = new Mensagem();
            msgEnvio.setServidor(servidor);
            msgEnvio.setFuncionalidade(getFuncionalidade());
            
            try  
            {
                captador.AlterarSituacao(SituacaoCaptador.INDISPONIVEL);
                String sentence = msgEnvio.gerarMensagem();
                Registro.RegistrarEnvio(this, sentence);
                
                Mensagem msgRetorno = captador.getComunicacao().Comunicar(captador, msgEnvio);
                Registro.RegistrarRetorno(this, msgRetorno.getRetorno());
            }
            catch(MensagemInvalida | IOException ex)
            {
                Registro.RegistrarErro(this, ex.getMessage());
                throw ex;
            }
            finally
            {
                captador.AlterarSituacao(SituacaoCaptador.DISPONIVEL);
            }
        }
    }
}
